package com.cictec.middleware.tde.rm.protocol.rm.encode;

import java.nio.ByteBuffer;

import com.cictec.middleware.commons.utils.BinaryUtils;
import com.cictec.middleware.tde.exception.MessageEncoderException;
import com.cictec.middleware.tde.rm.protocol.AbstractMessageEncoder;
import com.cictec.middleware.tde.rm.protocol.TerminalMessage;
import com.cictec.middleware.tde.rm.protocol.annotion.TerminalMessageEncoder;
import com.cictec.middleware.tde.rm.protocol.rm.message.Rm0xCBPlatformMessage;
import com.cictec.middleware.tde.rm.protocol.rm.utils.RmBinaryUtils;

/**
 * 0xCB 下发报站文件(ftp模式)
 * 
 * @author wsl
 *
 */
@TerminalMessageEncoder(0xCB)
public class Rm0xCBEncoder extends AbstractMessageEncoder {

	@Override
	public byte[] encode(TerminalMessage message) throws MessageEncoderException {
		Rm0xCBPlatformMessage msg = (Rm0xCBPlatformMessage) message;
		ByteBuffer out = ByteBuffer.allocate(256);
		RmBinaryUtils.dateToDwordRM(msg.getCreateTime(), out);// 创建时间
		BinaryUtils.intToUnsignedByte(msg.getUpdateType(), out);// 升级类型
		BinaryUtils.intToUnsignedByte(msg.getDeviceModelLengh(), out);// 设备型号长度
		byte[] msgBytes = BinaryUtils.stringToBytes(msg.getDeviceModel());
		out.put(msgBytes);// 设备型号
		// BinaryUtils.intToUnsignedByte(pubf.getSessIdLength(), out);//会话id长度
		byte[] msgBytes1 = BinaryUtils.stringToBytes(msg.getSessId());
		BinaryUtils.intToUnsignedByte(msgBytes1.length, out);// 会话id长度
		out.put(msgBytes1);// 会话id
		String[] adds = msg.getAddress().split("\\.");
		BinaryUtils.intToUnsignedByte(Integer.parseInt(adds[0]), out);
		BinaryUtils.intToUnsignedByte(Integer.parseInt(adds[1]), out);
		BinaryUtils.intToUnsignedByte(Integer.parseInt(adds[2]), out);
		BinaryUtils.intToUnsignedByte(Integer.parseInt(adds[3]), out);
		// ftp ip地址
		BinaryUtils.intToWord(Integer.parseInt(msg.getPort()), out);// 链接通道端口

		byte[] msgBytes2 = BinaryUtils.stringToBytes(msg.getFtpUser());
		BinaryUtils.intToUnsignedByte(msgBytes2.length, out);// ftp用户长度
		out.put(msgBytes2);// ftp用户
		byte[] msgBytes3 = BinaryUtils.stringToBytes(msg.getFtpPassWord());
		BinaryUtils.intToUnsignedByte(msgBytes3.length, out);// ftp密码长度
		out.put(msgBytes3);// ftp密码

		byte[] msgBytes4 = BinaryUtils.stringToBytes(msg.getFileCatalog());
		BinaryUtils.intToUnsignedByte(msgBytes4.length, out);// 文件目录长度
		out.put(msgBytes4);// 文件目录

		byte[] msgBytes5 = BinaryUtils.stringToBytes(msg.getFileName());
		BinaryUtils.intToUnsignedByte(msgBytes5.length, out);// 文件名称长度
		out.put(msgBytes5);// 文件名称
		byte[] msgBytes6 = BinaryUtils.longToDword(msg.getFileDownLoadTime());
		out.put(msgBytes6);// 文件下载时间
		byte[] msgBytes7 = BinaryUtils.longToDword(msg.getFileUpdateTime());
		out.put(msgBytes7);// 定时升级时间
		byte[] msgBytes8 = BinaryUtils.longToDword(msg.getCrc());
		out.put(msgBytes8);
		BinaryUtils.intToWord(msg.getReserved(), out);// 预留
		return toBytes(out);
	}

}
